{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore') # 忽略报错(警告)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#读取数据\n",
    "data2=pd.read_csv('C:/Users/firework/Desktop/data.csv',sep=',',encoding='utf-8')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据切分\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore') # 忽略报错(警告)\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "df_copy_Logistic = data2.copy()\n",
    "X = df_copy_Logistic.drop(columns=['channel'])\n",
    "y = df_copy_Logistic['channel']\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "# 画出学习曲线，选择最合适的L1或L2的正则化参数C\n",
    "l1=[]\n",
    "l2=[]\n",
    "l1_test=[]\n",
    "l2_test=[]\n",
    "for i in np.linspace(0.05,1,19):\n",
    "    # 实例化\n",
    "    lr1=LR(penalty='l1',C=i,solver='liblinear',max_iter=1000,random_state=0)\n",
    "    # 训练\n",
    "    lr1_fit=lr1.fit(X_train,y_train)\n",
    "    l1.append(accuracy_score(lr1_fit.predict(X_train),y_train))\n",
    "    l1_test.append(accuracy_score(lr1_fit.predict(X_test),y_test))\n",
    "    \n",
    "    lr2=LR(penalty='l2',C=i,solver='liblinear',max_iter=1000,random_state=0)\n",
    "    lr2_fit=lr2.fit(X_train,y_train)\n",
    "    l2.append(accuracy_score(lr2_fit.predict(X_train),y_train))\n",
    "    l2_test.append(accuracy_score(lr2_fit.predict(X_test),y_test))\n",
    "graph=[l1, l2, l1_test, l2_test]\n",
    "color=['red','green','yellow','gray']\n",
    "label=['l1','l2','l1_test','l2_test']\n",
    "fig=plt.figure(figsize=(10,6))\n",
    "for i in range(len(graph)):\n",
    "    plt.plot(np.linspace(0.05,1,19),graph[i],color=color[i],label=label[i])\n",
    "plt.legend(loc=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8270718851631714 21\n"
     ]
    }
   ],
   "source": [
    "# 画出学习曲线，找到最优迭代次数\n",
    "iter=[]\n",
    "for i in range(200):\n",
    "    # 实例化\n",
    "    lr1=LR(penalty='l2',C=0.4,solver='liblinear',max_iter=i+1)\n",
    "    # 训练\n",
    "    lr1_fit=lr1.fit(X_train,y_train)\n",
    "    iter.append(accuracy_score(lr1_fit.predict(X_train),y_train))\n",
    "plt.figure(figsize=(10,6))\n",
    "plt.plot(range(200),iter)\n",
    "plt.show()\n",
    "print(max(iter),iter.index(max(iter))+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优分裂点: 0.0 / fl_score值: 0.9010474430067775\n",
      "准确率: 0.8199147790984526 / 召回率: 1.0 / AUC: 0.6078239152412588\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1d680c36be0>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmMAAAFNCAYAAABMhmimAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xm8VfP+x/HXp06FkqKJiqJw5RpTpq4MpTIkc4bM+bkyz1ORm1lEcYsSIXMJkaLMGkhRuIWoNCpUGs/5/P747nIc55zOOe291z57vZ8e62Hvtdde63Madp/9/X7W52vujoiIiIhEo0LUAYiIiIjEmZIxERERkQgpGRMRERGJkJIxERERkQgpGRMRERGJkJIxERERkQgpGRMRERGJkJIxERHJOmY2y8xWmtlyM5tvZoPNrFqBYw40s3fNbJmZ/WZmr5nZbgWOqW5mD5rZT4lzzUw8r5Xen0iymZIxERHJVse4ezVgL2Bv4Ib1L5jZAcDbwKvAdkBjYArwkZntmDimMvAO0AxoB1QHDgR+AVqkKmgzy0nVuSUzKRkTEZGs5u7zgVGEpGy9e4Cn3L2Puy9z9yXufjPwKXBr4pguwPZAJ3ef7u557r7Q3W9395GFXcvMmpnZaDNbYmYLzOzGxP7BZvaffMe1NrM5+Z7PMrPrzGwqsMLMbjazlwqcu4+ZPZR4vJWZDTSzeWY218z+Y2YVN/GXSiKiZExERLKamTUA2gMzE8+3IIxwvVjI4S8AbRKPjwDecvflJbzOlsAY4C3CaFsTwshaSXUGjgJqAEOADmZWPXHuisDJwLOJY58E1iWusTfQFji/FNeSDKJkTEREstVwM1sGzAYWAj0S+7cm/Ps3r5D3zAPW14NtU8QxRTkamO/u97v7qsSI2/hSvP8hd5/t7ivd/Ufgc+C4xGuHAX+4+6dmVpeQXF7u7ivcfSHwAHBqKa4lGUTJmIiIZKvj3H1LoDWwK38mWUuBPGDbQt6zLbA48fiXIo4pSkPguzJFGswu8PxZwmgZwGn8OSq2A1AJmGdmv5rZr0B/oM4mXFsipGRMRESymru/BwwG7ks8XwF8ApxUyOEn8+fU4hjgSDOrWsJLzQZ2KuK1FcAW+Z7XKyzUAs9fBFonplk78WcyNhtYDdRy9xqJrbq7NythnJJhlIyJiEgcPAi0MbP1RfzXA2eZ2aVmtqWZ1UwU2B8A3JY4Zggh8XnZzHY1swpmto2Z3WhmHQq5xutAPTO73MyqJM7bMvHaF4QasK3NrB5w+cYCdvdFwDjgCeAHd/86sX8e4U7Q+xOtNyqY2U5mdkgZfl0kAygZExGRrJdIbJ4Cbkk8/xA4EjieUBf2I6EQ/mB3n5E4ZjWhiP8bYDTwOzCBMN35t1owd19GKP4/BpgPzAAOTbw8hNA6YxYhkXq+hKE/m4jh2QL7uwCVgemEadeXKN2UqmQQcy84KioiIiIi6aKRMREREZEIKRkTERERiZCSMREREZEIKRkTERERiZCSMRGJNTMbZGYLzeyrIl43M3vIzGaa2VQz2yfdMYpIdtPK8CIxtPne3Up9G/XKyX0tFbFkgMFAX0Lbg8K0B5omtpbAo4n/F6tWrVreqFGj5EQoIhnvs88+W+zutcvyXiVjIhJr7v6+mTUq5pCOwFMe+gB9amY1zGzbROPNIjVq1IhJkyYlMVIRyVQrV8IWW9iPZX2/kjGRODJVKJRCff66ZuCcxL7SLCAtIllq1Jt5TOlw/SadQ5/IInFkVvotvgr74Qud5jWzrmY2ycwmLVq0KMVhiUiUfv4Zzj8f/tfhMq7l3k06l5IxkTiyCqXf4msO0DDf8wbAz4Ud6O4D3L25uzevXbtMpSMikuFmz4bLL4eddoInn4Ta7Zqz+gqNjIlIaWlkrDRGAF0Sd1XuD/y2sXoxEck+K1fCNdfAjjtCv35w0TFz+PZbOPXNs6jS+85NOrdqxkTiKN4jXX9hZkOB1kAtM5sD9AAqAbj7f4GRQAdgJvAHcE40kYpIVD78EM49F2bMgPPOg7t3Hsg2PbrBlWNhx/03+fxKxkTiKN4jXX/h7p038roDF6cpHBHJILm5cNNNcM89sMMO8M47cNiSl+CUrtC2LeyTnLaD+nosEkeqGRMRKdbSpXD00XD33XDBBfDll3DY2lFw2mlwwAHw8stQuXJSrqWRMZE40siYiEiRZsyADh3gxx9hwICQjPHNN9CpEzRrBq+/DltskbTrKRkTiSONdImIFOqHH+DQQ2HNGhg7Fg46KPHCzjuHOcvzz4caNZJ6TSVjInGkkTERkb+ZOxcOPxz++APGjYM99gBmzoScHGjUKCRjKaBkTCSONDImIvIXs2ZB+/aweHEo1N9jD2DOHDjiCKhZEz7/PGVfZPWJLBJH6jMmIrLBc8/BnnuGkbE33oD99iNkZW3bwpIl8PjjKf0cVDImEke6m1JEhGXL4JxzoHNn2G03mDIFWrUCfv8d2rULBWSvvQb77pvSODRNKRJHSq5EJOYmTgxdKr7/Hm65Bbp3D6VhQKgNmzIFhg+HQw5JeSxKxkTiqIKmHUUkvp56KnTS33bbcMfkv/5V4IBeveCYY8I0ZRro67FIHGmaUkRi6tNPQ3eKf/0rDH5tSMTy8qB3b1ixAqpXT1siBkrGREREJCYWLIATToCGDeHFF8NNkgC4w6WXwlVXwUsvpT0uTVOKxJHujhSRmFm3Dk4+OSxz9MknsPXW+V7s3h369YNrroEuXdIem0bGyikLnjCzpWY2YRPO08rMvk1mbJnAzJab2Y5Rx5GxNE0pIjHTqxe8/35Y3mjPPfO90Ls3/Oc/Yc2ju++O5MuqRsbKr4OBNkADd19R1pO4+wfALkmLKsXMbBzwtLs/Xtxx7l4tPRGVUxoZE5EY+eQTuP12OOOMsG3w669wzz1w0knw6KORfTYqGSu/dgBmbUoilo3MLMfd10UdR8bTSJeIxMS8eSEBa9gQ+vYt8GKNGqGif7vtoGLFSOIDTVOmjZk1NLNXzGyRmf1iZn3NrIKZ3WxmP5rZQjN7ysy2ShzfyMzczM4ys5/MbLGZ3ZR47TzgceCAxHTcbWZ2tpl9WOCabmZNEo87mNl0M1tmZnPN7OrE/tZmNiffe/5hZuPM7Fczm2Zmx+Z7bbCZ9TOzNxLnGW9mO5XgZ3cz+7eZzUi873Yz28nMPjGz383sBTOrnDi2ppm9nvh1Wpp43CDxWi+gFdA38XP3zXf+i81sBjAj/89uZpXN7AszuySxv6KZfWRm3cv4W5kd1IFfRLJcbi488gjsuiv8/DM8/TRstVXixbffhptvDoX7jRpB5cpRhqpkLB3MrCLwOvAj0AioDzwHnJ3YDgV2BKoBBfP2gwnTiIcD3c3sH+4+EPg/4BN3r+buPUoQxkDgQnffEtgdeLeQOCsBrwFvA3WAS4BnzCz/NGZn4DagJjAT6FWCawO0A/YF9geuBQYApwMNE/F0ThxXAXiCMPK3PbCSxK+Ju98EfAB0S/zc3fKd/zigJbBb/ou6+xrgDKCnmf0DuB6oWIq4s5NqxkQki02ZAgcdBBdfDC1bwpdfhucAfPwxdOoEr78e2lhkAH3CpkcLYDvgGndf4e6r3P1DQjLS292/d/flwA3AqWaWf/r4Nndf6e5TgCnAnn87e8msBXYzs+ruvtTdPy/kmP0JCeFd7r7G3d8lJJGd8x3zirtPSEwFPgPsVcLr3+3uv7v7NOAr4O3Ez/0b8CawN4C7/+LuL7v7H+6+jJA0laT98Z3uvsTdVxZ8wd2/Av4DDAOuBs5099wSxp2dNDImIlloxYpwQ+S++4aVjJ55BkaNgiZNEgdMmQJHHQX164cXqmVGebGSsfRoCPxYSC3TdoTRsvV+JNTx1c23b36+x38QkqWyOAHoAPxoZu+Z2QGFHLMdMNvd8wrEVD8J8SzI93hlIc+rAZjZFmbWPzF1+zvwPlAjMbpYnNkbef1JwqjkSHefUcKYs5dGxkQky7zzTlhf8r77Qnf9b74Jyx1t+C45YwYceWRIwEaPhrp1iz1fOukTNj1mA9sXGPEC+JkwHbfe9sA6/pqolNQKYIv1T8ysXv4X3X2iu3ckTD8OB14o5Bw/Aw3N/vIv7/bA3DLEU1ZXEaZlW7p7dWB9b+T1f528iPcVtX+9RwijfEea2cGbHGV5p5ExEckSubnQowe0aQNbbAEffgj9++dr6Lre9OmhSH/0aNhhh0LPFRUlY+kxAZgH3GVmVc1sMzM7CBgKXGFmjc2sGnAH8HwZ7wacAjQzs73MbDPg1vUvJIrYTzezrdx9LfA7UNg03XhCUnetmVUys9bAMYT6tnTZkjBS9quZbQ0UrIdbQKivKzEzO5NQr3Y2cCnwZOLXO740MiYiWWDu3JCE9ewJZ50Fkyblqw1bLy8x2dOxYxgd23XXtMe5MfqETYNEfdIxQBPgJ2AOcAowCBhCmIr7AVhFKJovyzX+B/QExhDuKPywwCFnArMSU3//RyhqL3iONcCxQHtgMWE0qYu7f1OWmMroQWDzxPU/Bd4q8Hof4MTEnZYPbexkZrZ94pxd3H25uz8LTAIeSG7Y5YySMREpx2bPDqsXNWkSOlM88UTYqlYtcODvv0OrVmHtIwhDZxnI3Dc2uyMi2WbzYx8t9V/8lSMuKnauMjEi+z5QhVD7+JK79zCzZ4DmhJtIJhDu6l1rZkZIrjsQ6g/PXn9jiZmdBdycOPV/3P3J0sYbtebNm/ukSZOiDkMkq3z/Pdx1FwweHLpSdOkCN94IOxXWZGnlSmjfHj76CIYNg6OPTmlsZvaZuzcvy3vV9FUkjlIz0rUaOMzdlyfapHxoZm8S7rpdPxL7LHA+8ChhBLZpYmuZ2Ncy3/R0c0It4GdmNsLdl6YiaBHJfIsXw7XXwlNPQU5OWLno2muLKf1auxZOOSWsf/T00ylPxDaVkjHZZGbWitCe4m+0LFGGSkFBvodh9uWJp5USm7v7yD8vaxOABomnHYGnEu/71MxqmNm2QGtgtLsvSbxnNKFP3dCkBy0iGe/ll+Hf/4YlS+CSS0Lriu22K+YNeXlwzjnw2muh6+tpp6Ut1rJSMiabLLG+pZKu8iRFNWCJFiSfEeoj+7n7+HyvVSLULl6W2FWfv7YkmZPYV9R+EYmRhQuhW7dQ7rXPPuEmyD32KMEbzUIfsV694KKLUh5nMmRsMrZq3UZbFUiaTZvze9QhSCH2bVS99MNcZRgZM7OuQNd8uwa4+4D8xyRuVtnLzGoAw8xs90TTXQg3hLyfSN7hz3YlfzlFMftFJCZeeCF0z//995BTXXMNVKpUgjcuWQJbbw133x2KysoJ3SIlIiXi7gPcvXm+bUAxx/4KjCNML2JmPYDawJX5DptDaIi8XgNCr7ui9otIlvvtt7Co9ymnQOPG8PnnoUC/RIlY796h6+usWeF5OeqPqGRMJIbMrNRbCc5ZOzEihpltDhwBfGNm5wNHAp0LrO4wAuhiwf7Ab+4+DxgFtE0sGl8TaJvYJyJZ7IMPYM894bnn4NZbwxKSzZqV8M2DBsFVV8G//gUNG278+AyTsdOUIpI6JUmuymBbQkPdioQvei+4++tmto6wrNYnieu+4u49gZGEthYzCa0tzgFw9yVmdjswMXHenuuL+UUk+yxbBnfcAffcA40ahQ76++9fihO8/HK4vbJtWxgyJHTZL2eUjInEUQpyMXefSmLB9wL7C/2cSdxFeXERrw0iNEUWkSy1cmW42fGuu0LrinPOgT59YMstS3GSjz6Czp2hZUt45RWoUiVl8aaSpilFYigV05QiIiWxZg3897+he/7VV8Pee8P48WGmsVSJGMBee4U7Jt94o5D2++WHRsZEYkjJlYik25o18OyzYR3JH36AAw+EZ56B1q3LcLJvvgnNxqpXD8Np5ZySMZEYUjImIumyZAn07w8PPwzz5oWRsDfeCCsVlemjaMaMkMEdcEBY5igLKBkTiSElYyKSav/7Hzz4YFhHcuVKaNMmTEW2bQsVylokNXduOFFuLtx5ZzLDjZSSMZE4Ui4mIingDuPGhZZfr78OlSuHvmGXXw7//Ocmnnzx4pCILVkCY8fCrrsmI+SMoGRMJIY0MiYiybRmTegP1rs3TJkCtWtDjx6htr5u3SRd5LzzQrHZW2/Bvvsm6aSZQcmYSAwpGRORZFiwAB57DPr1g/nzQwP8xx+H00+HzTZL8sX69Alzn4cckuQTR0/JmEgMKRkTkbJyD93xH3kkLOK9dm2oAxs8OPw/qR8va9fCk0/CueeGjrCNGiXx5JlDyZhIDCkZE5HSWrEitKZ45BH44ovQVeKii+Df/4ZddknBBfPyQhL29NMhCTviiBRcJDMoGROJI+ViIlJCM2aEBGzwYPj111CI/9//hqnIatVSdFF3uPTSkIj16pXViRgoGROJJY2MiUhxcnNDL7B+/eDttyEnB048MYyCHXxwkqciC9O9e7j4VVfBDTek+GLRUzImEkNKxkSkMEuXwoAB8Oij8OOPUL9+6Jh/wQVQr16agvjuO7j33nD35L33piHzi56SMZEYUjImIvn98gs88AA89BAsWwaHHgr33w/HHguVKqU5mJ12gk8/DfOhMfmsUjImIiISU4sXh6Srb99QoH/iiXDzzbDHHhEE88orsHw5dOkSFgCPkbIuSCAi5ZmVYctSZtbOzL41s5lmdn0hr29vZmPNbLKZTTWzDlHEKZJMCxfCddeFmxTvvhuOPhq+/BJeeCGiRGz0aOjcOcyR5uZGEEC0NDImEkOapgzMrCLQD2gDzAEmmtkId5+e77CbgRfc/VEz2w0YCTRKe7AiSbBgQSjDevRRWLUKTj01jIT94x8RBvXJJ3DccWF5o9deg4oVIwwmGkrGRGJIydgGLYCZ7v49gJk9B3QE8idjDlRPPN4K+DmtEYokwbx5cM890L8/rF4d2lLcdFOK+oOVxtSp0KEDbLcdjBoFNWtGHFA0lIyJxJCSsQ3qA7PzPZ8DtCxwzK3A22Z2CVAVyO6GR5JVFiyAO+4Is39r18KZZ8KNN0LTplFHljB6NFStGv6ftts1M49qxkRiyMxKvWWpwn4wL/C8MzDY3RsAHYAhZlboZ6eZdTWzSWY2adGiRUkOVaR0Pvoo1ME/8gicdhp8+y088USGJGKe+Gt21VWhWC1LlzkqKSVjInGkAv715gAN8z1vwN+nIc8DXgBw90+AzYBahZ3M3Qe4e3N3b167du0UhCuyce6hJqx169Ahf/JkGDgwdIzICIsXh8W+J04Mz2M6NZmfkjGRGNLI2AYTgaZm1tjMKgOnAiMKHPMTcDiAmf2DkIxp2Esy0qpVcP75oVN+27Yh39l996ijymfZslAjNmFC6KUhgGrGRGIpi5OrUnH3dWbWDRgFVAQGufs0M+sJTHL3EcBVwGNmdgVhCvNsdy84lSkSuTlz4PjjQwJ2yy1w661QIZOGXFatgo4d4fPPYdiwMHQngJIxkVhSMvYndx9JaFeRf1/3fI+nAwelOy6R0nj/fTjpJPjjj9A7tVOnqCMqYO1aOOUUGDcOhgyBY46JOqKMkkk5s4iki2rGRLKCe+ief/jhUKNGmP3LuEQM/mzk+vDDoa+G/IVGxkRiSCNjIuXfypVw0UXw5JNhoGnIENhqq6ijKsA9DNdVrRqmJjNq3jRz6FdFJIZUwC9Svs2eDa1ahUTs1lth+PAMTMQAevSAAw+E335TIlYMjYyJxJCSK5Hy65NPwlTkH3/AiBEZXH71wANw++1w7rlQvfrGj48xpakiMaSRMZHyafDgP/uHjR+fwYnYoEFw5ZVwwgmh/b8+Q4qlZEwkjlTAL1Ku5OaGZvXnnBOmJydMiHhx7+K89hpccEFodPbMM7Fc+Lu0lIyJxJBGxkTKj99+g6OPht69oVs3ePNN2HrrqKMqxt57h0UwX3kFqlSJOppyQTVjIiIiGWrGjDAV+d130L8/dO0adUTFmDEDdtwRGjQI86lSYhoZE4khjYyJZL7Ro6FFi7CU45gxGZ6ITZ0agr3uuqgjKZeUjInEkFnpNxFJD3d46CFo3x4aNgzLGx1ySNRRFWPmzFAfVrVqmEeVUtM0pUgMaaRLJDOtWRMW+R44MCzjOGQIbLll1FEVY+5caNMG1q2DsWOhUaOoIyqXlIyJxJByMZHMk5sLHTrAO+/ATTdBz54Z3ifVHY47Lsyjjh2bwbd3Zj4lYyIxpJExkczTp09IxDK+UH89s9DYdd06aN486mjKNSVjIjGkXEwks3z/Pdx8c7hz8oILoo5mI1atglGjwjzqwQdHHU1WyOQBUBFJkQoVrNSbiKSGO1x4IeTkwCOPZPiXpbVr4ZRTwnpMX38ddTRZQyNjIjGU0R/2IjEzeHBoXfHoo6FFV8bKywvrTI4YAf36qUYsiZSMicSQasZEMsP8+WEJx1atMrxOzB0uuwyefhr+859wy6ckjZIxkRhSLiaSGS69FFauhMcey/A7Jz/8EPr2DZnjjTdGHU3WUTKWQh998D5339WLvNw8Op1wEuddkMlfe7LPyFeeZeybwzEzGjZuwoVXdefXJYt5+I6bWL7sdxo32YV/X9uTnEqVGPP6y4x+7UUqVKhAlc234PzLbqTBDjtG/SOkjEbGRKL36qvw4ovQqxfsskvU0WxEq1bw7rvQurW+zaVAJufh5Vpubi539OrJI/99nGEj3uCtka/z3cyZUYcVG0sWL2TU8Ofp1fcp7hnwPHm5eXwy7m2GPt6X9sefxgNPvELVatUZ+9arABx46JHc3f857nz0WY456Uye7v9AxD9Bamk5JJFo/fZbmOnbc0+45pqooynGkCHw0Ufh8aGHKhFLESVjKfLVl1Np2HAHGjRsSKXKlWnX4SjGjX0n6rBiJTd3HWtWr078fxU1tq7FtCkTadnqMABatTmKSZ+8B8AWVatteN/qVauyPvnQckgi0br22lAv9vjjUKlS1NEU4ZVX4Oyz4b77oo4k66VsmtLMdgU6AvUBB34GRrh7LO6FXbhgAfW2rbfheZ26dfly6tQII4qXrWvV4agTz+CSM4+hcpUq/HOfljRu+g+qVt2SihXDH/ttatVh6eKFG97z9ogXGPnKs6xbu5ab7nk0qtDTItuTTZFM9t57MGAAXHVVBvdKHTMGOneGli1D0b6kVEpGxszsOuA5wIAJwMTE46Fmdn0qrplpHP/bPv0DmD7Ll/3OZ5+8T58nX6Xfs2+yetUqpkz8+G/H5f89aXvsyTw4eDidz7uE4c8OSme4aaeRMZForFwJ558PO+4YljvKSJ9+GpY52mUXeOONsAC4pFSqpinPA/Zz97vc/enEdhfQIvFaocysq5lNMrNJAx8bkKLQ0qNu3XrMnzd/w/OFCxZQp06dCCOKl68mT6BOve2oXqMmOTk57HfQofxv+lRWrFhGbu46AH5ZvJAa29T+23sPaN2WSR+PS2/AaaaaMZFo9OgBM2eGkbEttog6miIMGgT16oUu+zVrRh1NLKQqGcsDtitk/7aJ1wrl7gPcvbm7Ny/vdx422/2f/PTTLObMmc3aNWt4a+QbHHLoYVGHFRu16tRjxtdfsnrVKtydaV9MpMEOjdltz+aM/+BdAD4Y/QbND/gXAPPm/rThvZMnfEi9+ttHEne6aGRMJP2GDYN77w39xA4/POpoivHoo6Fof9tto44kNlJVM3Y58I6ZzQBmJ/ZtDzQBuqXomhklJyeHG27qzkVdzycvL5fjOp1AkyZNow4rNprsujstWx3OjRefQcWKFWnUZBcOa9+JvVocxMN33MSLgx9lhya70PrIjkCoF/vq8wnk5ORQtVp1Lrq6R8Q/gYhkk2nToEuXUILVp0/U0RRi7tyQJQ4YAPXrQ926UUcUK+b+99qmpJzYrAJhWrI+oV5sDjDR3XNL8v5V6wopupJITZvze9QhSCH2bVS91ONW+/UaV+q/XxNvaq3xsVJo3ry5T5o0KeowJAMsXQr77QcrVsCkSSHXySi//AL/+hfMng1jx8K++0YdUblkZp+5e5luyUjZ3ZTungd8mqrzi0jZadpRJD1yc+HUU+Gnn2DcuAxMxJYtg/bt4bvv4K23lIhFRH3GRGIoFQX8ZtbQzMaa2ddmNs3MLivw+tVm5mZWK/HczOwhM5tpZlPNbJ98x55lZjMS21lJ/wUQSZMbb4S334ZHHoEDD4w6mgJWrYKOHeHzz8NSAK1bRx1RbGk5JJEYStHI2DrgKnf/3My2BD4zs9HuPt3MGgJtgJ/yHd8eaJrYWgKPAi3NbGugB9Cc0KPwMzMb4e5LUxK1SIoMHQr33AMXXRTaWWScZctgyRIYPBiOOSbqaGJNyZhIDKWiVYW7zwPmJR4vM7OvCTWj04EHgGuBV/O9pSPwlIfC1U/NrIaZbQu0Bka7+5JErKOBdsDQpActkiKTJ8N558HBB8ODD0YdTQF5eWGrXRsmTszgJQDiQ9OUIjFUltYW+fsAJrYi+8+YWSNgb2C8mR0LzHX3KQUOq8+fd1tDuMmnfjH7RcqFRYtCz9RttoGXXoLKlaOOKB93uPxyOOEEWLtWiViG0MiYSAyVZWTM3QcAG+3GbGbVgJcJLW7WATcBbQs7tLDLFLNfJOOtXQsnnwwLFsCHH2Zgh4hbb4WHH4YrroAcpQCZQiNjIjGUqqavZlaJkIg94+6vADsBjYEpZjYLaAB8bmb1CCNeDfO9vQFhDdui9otkvKuvDndNPvZYBq47+eCDYQ2mc86B++/XbdUZRMmYSAyl6G5KAwYCX7t7bwB3/9Ld67h7I3dvREi09nH3+cAIoEvirsr9gd8SdWejgLZmVtPMahJG1Ual5BdCJImeeAIeeigMOp15ZtTRFPDUUyGw448PjV2ViGUUjVGKxFCK1po8CDgT+NLMvkjsu9HdRxZx/EigAzAT+AM4B8Ddl5jZ7cDExHE91xfzi2Sq8ePh//4PDjss3EGZcXbdNTQ8GzxY05MZSL8jIjGUilzM3T+k8Hqv/Mc0yvfYgYuLOG4QMCiZ8Ymkyvz5YcBpu+3g+eczLNeZMwcaNIAWLUKvDclImqYUiaFUTFOKxNHq1eHGxF9/heHDoVatqCPK59NPw4hY//5RRyIbkUn5u4ikiXIrkU23fHlIxD7+OIyeo193AAAgAElEQVSI7bln1BHl8+WX0KED1KsXuuxLRlMyJhJDGukS2TSLF8NRR4WFvwcODO0sMsZ330HbtrD55jB6dEjIJKMpGROJIeViImX3009w5JHwww/w8suhwWvGWLkyJGJr1sD770PjxlFHJCWgZEwkhiooGxMpk6+/DrnO77/DqFFwyCFRR1TA5puHxq677grNmkUdjZSQkjEREZESGD8+lGFVqgTvvQd77RV1RPksWwbTpsH++2dgkzPZGN1NKRJDqerAL5KtRo0KPcRq1ICPPsqwRGzVqjBXesQRYWFMKXc0MiYSQyrgFym5oUPhrLNgt93grbcyrB5+3brQzPXdd2HIEKhdO+qIpAw0MiYSQxWs9Fu2MrN2Zvatmc00s+uLOOZkM5tuZtPM7Nl0xyjRefhhOP10OOCAMDWZUYlYXh6cey68+moI9Iwzoo5IykgjYyIxpJGxwMwqAv2ANoR1Myea2Qh3n57vmKbADcBB7r7UzOpEE62kkzv06AG33x7adD33HGy2WdRRFTB0aBgN69kTunWLOhrZBErGRGJIudgGLYCZ7v49gJk9B3QEpuc75gKgn7svBXD3hWmPUtIqNxcuvjg0rj/33PD/jFriaL3OnWGLLTKst4aUhaYpRWLIyvBflqoPzM73fE5iX347Azub2Udm9qmZtSvqZGbW1cwmmdmkRSqkLpdWrw4lWP37w/XXw+OPZ2AiNngwzJoFFSpAp076dpUFivwjZmbDAC/qdXc/PiURiUjKZXMNWCkV9itR8HMvB2gKtAYaAB+Y2e7u/uvf3ug+ABgA0Lx58yI/PyUzLVsWBpnefRfuvx+uvDLqiAoxeDCccw5cdBE88kjU0UiSFJfv901bFCKSVqoZ22AO0DDf8wbAz4Uc86m7rwV+MLNvCcnZxPSEKOmwcGHoIfbFF/DUUxnaqmvYMDjvvNDC4oEHoo5GkqjIZMzd31n/2MwqA9u7+8y0RCUiKaVcbIOJQFMzawzMBU4FTitwzHCgMzDYzGoRpi2/T2uUklKzZoWu+nPmhBsTjzoq6ogK8c47Yf60RYuQlFWpEnVEkkQbrRkzs6OAL4HRied7JaYwRaScqmBW6i0bufs6oBswCvgaeMHdp5lZTzM7NnHYKOAXM5sOjAWucfdfoolYku2rr+DAA0Ov1DFjMjQRcw+3de6yC4wcCdWqRR2RJFlJyhJ7Ai0JH0K4+xdm1iSlUYlISmVpblUm7j4SGFlgX/d8jx24MrFJFhkzBk48EapWhQ8+gN13jzqiIpjBiBHwxx9Qs2bU0UgKlORuyrWFFKqqMFWkHDOzUm8i2WTAAGjXDho2hI8/ztBE7PvvQ+v/FSugevUM6zgryVSSZOxrMzsZqGBmjc3sQeDTFMclIimktSklrnJz4eqr4cILoU2bsM7kDjtEHVUhfv45FOq//jrMnRt1NJJiJUnGugH7AnnAMGA1cHkqgxKR1FLNmMTR8uVw/PGhbUW3bvDaa2HAKeP88ku4o2DRorAY5s47Rx2RpNhGa8bcfQVwnZndFp76ytSHJSKppNRK4mbOHDjmGJg6FR56CC65JOqIirBsWeixMXMmvPkm7Ldf1BFJGmw0GTOzfYCBQO3E8wXABe7+eYpjE5EUUQ2YxMlnn8Gxx4Y857XXQq6TsebMCdsLL8Chh0YdjaRJSe6mfAK43N3HAphZ68S+PVMYl4iIyCYbPhxOPx1q1Qr1Yf/8Z9QRFSEvLyxv9I9/wIwZYc1JiY2S1IytWJ+IAbj7OGB5yiISkZSrYKXfRMoTd7jvvlAjtvvuMH58hidi55wTFsN0VyIWQ0UmY2a2h5ntAYw3s35mdrCZHWRmD5HoOSYi5ZNaW0g2W7sWunaFa64JfcTGjcvgrhDucMUVYQ2mqlV163JMFTdN2a/A8z3yPVafMZFyTJ/3kq2WLg0J2Lvvwk03Qc+eYfYvY912W7ij4PLL4eabo45GIlLc2pSt0hmIiKSPRrokG82cCUcfHXqlPvkkdOkSdUQb0adPSMbOPjv029Dfy9gqSQE/ZnYk0AzYbP0+d78jVUGJSGqpBkyyzQcfQKdOYdZvzBj417+ijqgE6taFU06Bxx7L8OE7SbWSLBT+CHAWYV22zYEzAK1NKVKOqWZMssmQIXD44bDNNqFQP+MTsV8S68yfeioMHQo5JRoXkSxWklT8YHc/DfjF3W8hLBreILVhiUgqWRm28sbMKprZ6VHHIamTlxfKrLp0gYMPhk8+gSaZPlTwzjvQqBGMGhWe64uOULJkbH3H/VVmVg9YBTRKWUQiknLZtBySmVU3sxvMrK+ZtbXgEuB74OSo45PUWLkSOneGXr3gvPPCqkFbbx11VBsxfjx07BiSMXXWl3xKMjb6ppnVAO4DvgBygSdTGpWIpFQG51ZlMQRYCnwCnA9cA1QGOrr7F1EGJqmxYEHIaSZMgLvvDi0sMv7P9FdfQfv2oU7s7bfLQeYo6VSStSlvTTx80cxeJ9SNNU5lUCKSWllWA7aju/8TwMweBxYD27v7smjDklRYsAAOOADmz4eXXw5F+xlvwYKw8Pfmm4e7C7bdNuqIJMOUqmowsUj4SjP7Atg+NSGJSKplVy7G2vUP3D3XzH5QIpadVq8OHfXnzw99xPbfP+qISqhOndCF9qSToLHGMuTvynoLR3Z9lIvETCbXgJXBnmb2O39+Lm2e77m7e/XoQpNkcYd//xs+/hiee66cJGJLloQutDvtBLfeGnU0ksHKmoypA79IOZZNuZi7V4w6Bkm9Pn1g0KBw9+Qpp0QdTQksWxZqxBYsgG+/hSpVoo5IMliRyZiZDaPwpMuAbVIWkWSsgzvdGHUIUoiVk/uW+j3ZVDNmZpsB/0fofzgVGOTu66KNSpLp7bfhqqvguONCw/qMt2pVKGb77LNQ2KZETDaiuJGx4j7hS//pLyIZI8t6fT9JqBv7AOhAWC3kskgjkqT53//CSFizZqG5a8Y3ql+3LvTceOedsCZTx45RRyTlQHFrU76TzkBEJH2yaWQM2C3f3ZQDgQkRxyNJ8uuvcOyxoUH9iBFQrVrUEZXAvffC8OFhXjXjF8eUTKE1GESkvMt/N+W6LEs0Yys3Nwwwffdd6AbRqFHUEZXQpZfC9tvD6Vr8QUou0wd8RSQFKljptwy2l5n9ntiWAXusf5y4q1LKoWuvDV31+/WDQw6JOpoSGDIkFO1XrapETEqtxMmYmakCUSRLZFkyNsXdqye2Ld09J99jtbUohwYPht69oVu30J4r4z38cJiSfOihqCORcmqjyZiZtTCzL4EZied7mtnDKY9MRFLGzEq9ZTC12skiH38MF14Ihx0WErKM99RTYWqyUye47rqoo5FyqiQ1Yw8BRwPDAdx9ipkdmtKoRCSlMnykq7TqmNmVRb3o7uXhn3QBZs8OHfYbNoQXX4RKlaKOaCOGD4dzz4XDD4ehQ8OdBiJlUJI/ORXc/ccC34xzUxSPiKRBZg90lVpFoBpaGaRc++OP0AXijz/CUkcZv472mjVw5ZXQvHlIytRLTDZBSZKx2WbWAnAzqwhcAvwvtWGJSCpl2XJI89y9Z9RBSNm5wznnwBdfwGuvwW67RR1RCVSuHHqJbbVVOem5IZmsJAX8FwFXEhYGXwDsn9gnIuVUhTJsGSyrMss46tULXngB7roLjjoq6mg24quv4KabIC8vLPqd8UN4Uh5sdGTM3RcCp6YhFhFJk+waGOPwqAOQshs2DG65Bc48E665JupoNuL776Ft2/D4kkugXr1o45GssdFkzMweo5C7ldy9PNxwLCKFyKZpSndfEnUMUjZTp4YkrEULGDAgw78kzJsHbdrA6tXw/vtKxCSpSlIzNibf482ATsDs1IQjIumQ0f/oSSwsWhSWOtpqq1D/vtlmUUdUjCVLwojYggXh7oJmzaKOSLLMRktB3P35fNuTwPFAeSivFJEipKrpq5kNMrOFZvZVgf2XmNm3ZjbNzO7Jt/8GM5uZeO3IfPvbJfbNNLPrk/VzS2ZYswZOPDHkNq++CttuG3VEGzF5Mvz0Uwi2RYuoo5EsVJamKI2BHZIdiIikTwqnKQcDfYGn1u9I9CXsCOzh7qvNrE5i/26EetRmwHbAGDPbOfG2fkAbYA4w0cxGuPv0VAUt6fXQQ2Gm75lnQmeIjOUehpEPPxxmzYKaNaOOSLJUSTrwLzWzJYntV2A0cGPqQxORVDEr/VYS7v4+ULCG6yLgLndfnThmYWJ/R+A5d1/t7j8AM4EWiW2mu3/v7muA5xLHShb49Ve44w5o1w5OOy3qaIqxbh2cckpYcxKUiElKFZuMWej0uidQO7HVdPcd3f2FdAQnIqmR5rUpdwZamdl4M3vPzPZL7K/PX+tP5yT2FbVfssC998LSpXDnnVFHUoy8PDj//LAMwNKlUUcjMVBsMubuDgxz99zEpjXgRLKAleU/s65mNinfVtI7qnOAmoQehdcALyS+6BWW4nkx+6WcmzcPHngAOneGvfaKOpoiuIfO+k8+CbfeGtadFEmxktSMTTCzfdz985RHIyJpUZaRLncfAAwow+XmAK8kvsxNMLM8oFZif8N8xzUAfk48Lmq/lGO33w5r10LPTF4v4fbboU8fuOwy6N496mgkJoocGTOz9YnawYQP0G/N7HMzm2xmSsxEpKSGA4cBJAr0KwOLgRHAqWZWxcwaA02BCcBEoKmZNTazyoQi/xGRRC5JM3MmPPYYdO0KTZpEHU0x1q2Ds86C3r3VA0bSpriRsQnAPsBxaYpFRNJkE2vAimRmQ4HWQC0zmwP0AAYBgxLtLtYAZyVGyaaZ2QvAdGAdcLG75ybO0w0YRVgEfJC7T0tNxJIut9wSlnO85ZaoIynCihVQtWoYtsvLgwoZvgiYZJXikjEDcPfv0hSLiKSJpegbv7t3LuKlM4o4vhfQq5D9I4GRSQxNIjR5Mjz3XFjSMSMb17/6Klx4IYwZA7vvrkRM0q64ZKy2mV1Z1Ivu3jsF8YhIGqRqZEykMDfcENbTzsi1J999F04+GfbeGxo1ijoaianikrGKQDUKv7NJRMoxlcJIuowdC6NGhZYWW20VdTQFTJgQ1mTaeWcYORKqVYs6Iomp4pKxee6eyfe8iEgZZdNC4ZvKzNoBfQhfQB9397uKOO5E4EVgP3eflMYQyy33MCrWoAFcfHHU0RQwYwa0bw916oRsceuto45IYqy4iXF9WotkqTQ3fc1YZlaRsPRSe8Kau50TyzQVPG5L4FJgfHojLN+GD4fx40O7rs03jzqaAho0gOOPD3Vi220XdTQSc8UlY4enLQoRSatULYdUDpV06aXbgXuAVekMrjxbty4U7O+6a+gUkTHmzw9rMm2+eei1seOOUUckUnQy5u4F15cTkSxRASv1lqU2uvSSme0NNHT319MZWHn31FPw9dfQqxfklKS9eDosWQJt2sAxx4Q5VJEMkSl/RUQkjbJ4pKu0il16ycwqAA8AZ5foZGGJqK4A22+/fRLCK59WrYIePaBFC+jUKepoEpYvhw4d4H//C8X6+ksgGUTNVERiSDVjGxS3JBPAlsDuwDgzm0VYX3OEmTUv7GTuPsDdm7t789q1a6co5Mz3yCMwZw7cdVeG5DyrV8Nxx8GkSfD883C4qnAks2hkTCSGdDflBhuWXgLmEpZeOm39i+7+G2EdTQDMbBxwte6mLNpvv4WpybZt4dBDo44m4aqr4J13YPDgkJSJZBglYyIxpFwscPd1hS29ZGY9gUnurjUxS+m++0Jp1p13Rh1Jgjtcf32YM+3SJepoRAqlZEwkhjQy9qfCll5y9+5FHNs6HTGVV/Pnh/W1TzkF9tkn4mDc4ZVXwkhYgwZKxCSjqWZMJIbU2kJS4T//gTVr4Pbbo46EEMyJJ8Izz0QdichGaWRMJIb0LUyS7bvvoH9/OP98aNo04mD69oXu3UODszMKXaNeJKMoGROJIdNQlyRZ9+5QqRLcckvEgQwZApdcEqYnH38cKuirh2Q+/SkViSErwyZSlMmT4dln4bLLIl5ZaMmSsAjm4YfD0KEZ1G1WpHj6kyoiImXmDldcAbVqwXXXRRzM1luHFhb/+AdstlnEwYiUnJIxkRjS3ZSSLMOGwXvvwaOPQo0aEQUxcSJ8+SWcey7st19EQYiUnZIxkRhSKibJsHo1XH01NGsWCvcjMW0atGsXMsFTT4UttogoEJGyUzImEkMaGJNk6NMHfvgB3n47ovKsH34Irf6rVIHRo5WISbmlZEwkhnQ3pWyqBQtCK6+jj4Y2bSIIYN68cOGVK+H992HHHSMIQiQ5lIyJxJBuo5ZN1b17yIPuuy+iAN58M2SEY8bA7rtHFIRIcigZE4khjYzJppgyJbTwuvRS2GWXiII491xo3x623TaiAESSR1+QRWJIfcakrNa3sqhRI4yOpdXq1XDyyfDxx+G5EjHJEkrGRGLIzEq9iQCMGAFjx0LPnlCzZhovvG4dnHYavPgizJyZxguLpJ6mKVPoow/e5+67epGXm0enE07ivAu6Rh1S1qpSOYcxAy+ncuUccipWZNiYyfznvyMBuPXiYzi+zd7k5ubx2Esf8MjQ92i1b1NefKArs37+BYBX3/2COwe8BcBW1Tbn0R6nsdtO2+IO/3fbM4yf+kNkP1sq6FuYlMXq1XDVVaGn6oUXpvHCeXnQtSu88go8+CB06ZLGi4uknpKxFMnNzeWOXj3p/9gT1K1bl9NOOZHWhx7GTk2aRB1aVlq9Zh3tuj7EipVryMmpwLuDruTtj6azS+N6NKhXgz073Y67U7tmtQ3v+Wjyd5xw2X//dq77rj2Rtz+ezmnXDKRSTkW22KxyOn+UtNBIl5RF375hQfA330xjKwv30MzsiSegR4+w5pJIltEX5BT56supNGy4Aw0aNqRS5cq063AU48a+E3VYWW3FyjUAVMqpSE5ORdydricdzB0D3sTdAVi0dHmx59iy6mYcvM9ODB72CQBr1+Xy2/KVqQ08AqoZk9JatAhuvz3UzLdrl8YL5+bC7NkhCevRI40XFkmftI+Mmdk57v5Euq+bbgsXLKDetvU2PK9Tty5fTp0aYUTZr0IF4+Nnr2OnhrXp//z7TPzqRxo3qM2Jbffl2MP2ZPHSZVx1z0t899MiAFru0Zjxz1/PvEW/cUPvYXz9/Xwa19+GxUuXM+C2M/jnzvWZ/PVsrr7nJf5YtSbiny65NDAmpdWjByxfDvffn8aLrlkDlSvDc8+FP7T6gytZKoqRsdsiuGbaOf63fZoaSq28PGf/U++iyZE303z3Hdhtp22pUjmH1WvWcvDp9/DEKx/Tv8fpAHzxzWx26XALLU+5i0efe48XHgj1fDk5Fdlr14Y89uIHHND5bv5YuZqrz42io2VqVcBKvUl8ffUV9O8P//53qBdLi6efhn32Cb3EKlaECprIkeyVkj/dZja1iO1LoG4x7+tqZpPMbNLAxwakIrS0qVu3HvPnzd/wfOGCBdSpUyfCiOLjt+UreX/SDNoeuBtzFyxl2JgvAHj13Sns3rQ+AMtWrNowrTnqw+lUyqnINjWqMnfBUuYu/JWJX/0IwLAxX7DXrg2j+UFSaP0gQ2k2iaf1rSy22iqNs4Svvgpnnw1164YLi2S5VH3VqAt0AY4pZPulqDe5+wB3b+7uzcv7nYfNdv8nP/00izlzZrN2zRreGvkGhxx6WNRhZa1aNauxVbXNAdisSiUOa7kL385awGvjptK6xc4AtNq3KTN/WghA3W223PDe5s12oIIZv/y6ggW/LGPO/KU03SEkzq1b7MI3388n21gZ/pN4euON0OS+Rw/YZps0XHDsWDjlFNh3Xxg+HDbbLA0XFYlWqmrGXgequfsXBV8ws3EpumZGycnJ4YabunNR1/PJy8vluE4n0KRJ06jDylr1alXnsZ5nUrFCBSpUMF4e/TlvfvAVH0/+jifuOItLTj+MFStXc1HPZwHodMTeXHBSK9bl5rJq1Vq63PBnGeOVd7/IE3ecTeWcisyau5iuPZ6O6sdKGY10SUmsXRtaWeyyS5iiTLnPPoNjj4UmTWDkSNhyy42/RyQL2Pq7zDLNqnWFFF1JpGru1y3qEKQQKyf3LXVqNXLawlL//erQrI5SuFJo3ry5T5o0KeowNkmfPnD55fD663DUUWm44Pz58H//B488Atttl4YLiiSPmX3m7s3L8l71GROJIRXky8b88gvceiu0bQsdOqT4YvPmQe3aUK9emJoUiRndniISQyrgl43p0QN+/x16907x7/+8edCqFVxwQQovIpLZNDImEkNKrqQ4H38cZgq7dYNmzVJ4oSVL4Mgj/5yeFIkpJWMiMaS7I6Uoq1bBeedBw4bQq1cKL7R8eShE+/bbUKzfsmUKLyaS2ZSMicRQBeViUoTbb4dvvoFRo1J8M2OXLjBhArz0Ehx+eAovJJL5lIyJxJBGxqQwkyfD3XeHfqtt26b4YtdfDyecAJ06pfhCIplPBfwiMaQCfilo7Vo499xwU2Pv3im6SF4ejB4dHrdoAaefnqILiZQvSsZEYkgd+KWge++FL74Ihfs1a6bgAu5w9dVhyG3cuBRcQKT80jSlSAypZkzy+/pruO02OOmkFM4a9uoFDzwAl1wChxySoouIlE9KxkRiSCNdsl5ubrh7slo1ePjhFF2kXz+45ZZQtP/gg5r3FilAyZhIDOnfQlmvb1/45BN46imoWzcFF/j2W7j0UujYEQYOhAqqjhEpSMmYSAwpFxOA77+HG2+E9u3hjDNSdJFddoHXXoPDDoMc/ZMjUhj9zRCJoQoaGos9d+jaFSpWhP79UzBaOm5cuMihh6ZhcUuR8k3JmEgMKRWTgQPhnXfg0UdDt/2kmjgRjjkmjIpNmKCpSZGNUDImEkfKxmJt7ly46qpwU2PXrkk++fTpYd6zdm0YMUKJmEgJKBkTiSHdTRlf7nDRRaHJ6+OPJzlXmjUr9BGrVCk0d91uuySeXCR7KRkTEYmR554L9fT33QdNmiT55P37wx9/wPvvw047JfnkItlL48ciMaTlkOJp0aLQZaJFC7j88hRcoFevUC+2++4pOLlI9lIyJhJDVoatROc1u8LMppnZV2Y21Mw2M7PGZjbezGaY2fNmVjlxbJXE85mJ1xsl9YeUv7n0UvjtNxg0KNxFmRTLl4e+GD/+GOY8NSImUmpKxkTiKAXZmJnVBy4Fmrv77kBF4FTgbuABd28KLAXOS7zlPGCpuzcBHkgcJynyxhthivLmm6FZsySddPVqOP54GDoUpk5N0klF4kfJmEgMpXCh8BxgczPLAbYA5gGHAS8lXn8SOC7xuGPiOYnXDzfThGgqrFoFl10Gu+4K11+fpJOuWwennx4K9QcODK0sRKRMlIyJxFBZasbMrKuZTcq3/aUpgrvPBe4DfiIkYb8BnwG/uvu6xGFzgPqJx/WB2Yn3rkscv03qf/r46d0bvvsOHnoIKldOwgnd4cIL4eWXw+LfZ5+dhJOKxJfuphSJobIMP7n7AGBAkec0q0kY7WoM/Aq8CLQv7FTFhOGF7JNNMHt2qKs//nho0yZJJ122DKZMge7dU3QngEi8KBkTiaPUTAYeAfzg7osAzOwV4ECghpnlJEa/GgA/J46fAzQE5iSmNbcClqQksmKYWTugD6HG7XF3v6vA61cC5wPrgEXAue7+Y7rjLKurr4a8vDA6lhR5eVC9OnzwAWy2WZJOKhJvmqYUiaEU1Yz9BOxvZlskar8OB6YDY4ETE8ecBbyaeDwi8ZzE6++6e1pHxsysItCPMIK3G9DZzHYrcNhkwk0JexBq2+5JZ4yb4t134YUX4IYbYIcdknDCvn3hqKNCL7HNN1fPE5EkUTImEkOp6DPm7uMJycrnwJeEz5cBwHXAlWY2k1ATNjDxloHANon9VwLJKi0vjRbATHf/3t3XAM8Rplo3cPex7v5H4umnhNG9jLd2bWhl0agRXHNNEk749NNwySVQpUqSCs9EZD1NU4rEUKrGM9y9B9CjwO7vCUlPwWNXASelKJSS2nATQcIcoGUxx58HvJnSiJLkkUdg2jQYPjwMYm2SESNCkf5hh4X+GDn6p0MkmfQ3SiSONLu0XolvIjCzM4DmwCFFnizcYdoVYPvtt09GfGWyYEGorT/ySDj22E082bhxcPLJsO++IbNTnZhI0mmaUiSGUthnrLxZfxPBevlvMNjAzI4AbgKOdffVRZ3M3Qe4e3N3b167du2kB1tSN9wAK1dCnz5JKOuqUQMOOghGjoQtt0xKfCLyV0rGRGJIa1NuMBFomliyqTJhxYAR+Q8ws72B/oREbGEEMZbKp5/CE0/AFVfALrtswol++SX8f6+94J13YBu1gBNJFSVjIjGUqrUpy5tEu41uwCjga+AFd59mZj3NbP0E371ANeBFM/vCzEYUcbrI5eZCt26w7bZh2aMymzUL9tgD7rwzWaGJSDFUMyYSR9maXZWBu48ERhbY1z3f4yPSHlQZDRoEn30GzzyzCTOK8+eH7rArV8LRRyc1PhEpnJIxkRjK4hqw2Fq6FG68EVq1gs6dN+EkbdvCvHkwZgz8859JjVFECqdkTEQkC3TvDkuWwMMPl7HGLy8vLPb97bfwxhuw//5Jj1FECqdkTCSGsrggP5amTAl9xS66CPbcs4wnqVAhFJxVrgxHlJuZWZGsoGRMJIaUi2UP99AYf+utoWfPMpwgNxe++CL0ETv11KTHJyIbp7spReJIt1NmjaFDw5rdd9wRErJScYcLL4QDDoAZM1ISn4hsnEbGRGJIBfzZYd26UCu2115w7rmlfLN7WLRy4MDQB6Np05TEKCIbp2RMJIZUM5YdXnwRvvsOXn4ZKlYs5ZvvuAPuvz/UiZVpflNEkkXJmEgMKRcr/9xDT9Zdd4Xjjivlm999N4yGnXlmktZMEpFNoWRMJI70b2+598Yb8OWXMHhwuBGyVA49NKyZdPrpZXiziNeLG9QAAA8FSURBVCSb/haKxJAWCi/f1o+Kbb89nHZaKd741lswc2YYCTv7bKhUKVUhikgpKBkTiSEtFF6+ffABfPxxqL8vcT41blyYz7ziilSGJiJloGlKkRhSblW+3XEH1K5dijsoJ00K3fV33DFMT4pIRtHImEgcqc9YufX55zBqVBjg2mKLErxh+nRo1w5q1YLRo8P/RSSjaGRMJIZUA1Z+3XknVK8O//53Cd/Qo0eYyxwzBurXT2lsIlI2GZuMbZaTPf9amFlXdx8QdRybauXkvlGHkDTZ8ntSVqoBK5++/Tb0FLv+ethqqxK+afBgmDsXdtoplaGJyCbQNGV6dI06APmbWP+eaJayfLrnHqhSBS6/fCMHLl0ahs6WLYOqVWHnndMSn4iUjZIxkThSNlbuzJ4NTz0F558PdeoUc+CKFXDUUWGZoylT0hafiJRdxk5TikjqqGas/Ln//vD/q68u5qDVq+H442H8+LBW0sEHpyU2Edk0SsbSI7a1SRlMvydSbixaBAMGhIb5O+xQxEG5uXDGGfD22zBoUEjKRKRcUDKWBnEuFM9Ucf89UQF/+fLQQ7BqFVx3XTEHzZ0bOsH27g3nnJO22ERk0ykZE4kh5WL/3979B1lV3nccf3/EIhBREhnzQ7AQQANlBCw1aGqgTYKYqCRRW50hakslpEmpBbVW0aAZgxWNMwIh0ZGx0ZEEbNAdIkmqsQoOWCFQlB8aUBs2aI0SmboSkeXbP55jvK774+yPe8/dvZ+Xs5O755x79vPsD/P1eZ7zPN3Ha6/BokVp8fyRI5u5ICL97/HHw9atMGBARfOZWed5Ar9ZDfJ2SN1DY2Pae/LNN9NyYc2aPz+tAHvokAsxs27KxVgZSZoi6VlJOyVdVXQeA0lLJb0i6ZmisxTLj1N2B9dem6aALVoEY8Y0c8GSJXDNNan7zMy6LRdjZSKpF7AYOBMYBVwoaVSxqQy4G5hSdIiiuWes+v34x6nT69JL08f73HcffP3rac/JpUvhMP/r3Ky78l9v+ZwC7IyI5yPiAPBDYGrBmWpeRDwO7C06R9HcL1bdtm2Diy+GT34SFi5s5oJVq+Cii2DiRFi+PG13ZGbdloux8jkO2F3yeX12zKxw7hmrXvv2wZe+lDYBv//+tOL++xw8CKeeCnV10KdPxTOaWdfy05Tl09z/fUXFU5g1w4u+VqdDh1KP2K5d8MgjMGhQkwsaGtL2Rl/8Ikyd6irZrIdwz1j51AODSz4fBOwpKIvZe3mcsip9+9vw4INptf2JE5uc3L4dhg9P3WXgQsysB3ExVj5PASMkDZXUG7gAqCs4kxngWqwarV4N112XVtmfNavJyRdfhM99Lq0pNnZsEfHMrIxcjJVJRBwEvgH8DNgOLI+IrcWmMknLgHXAiZLqJU0vOlMRPGesuuzcmdYTGzMmbXv0nu/3yy+nQqyhIa1zMXx4YTnNrDw8Z6yMIuIh4KGic9i7IuLCojNUA88Zqx7796dtJA87LC1n0a9fycmGBjjjDNizBx5+GE46qbCcZlY+LsbMapFrsaoxZw48/XQaphw6tMnJfv3So5WnnZaenjSzHsnFmFkNci1WHVauTIvoX345TCldivitt6C+HoYNg3nziopnZhXiOWNmNchzxoq3ezdMnw7jx8ONN5acaGyEadNgwgTYW/PrE5vVBPeMmdUgzxkrVmNjemry7bdh2TLo3Ts7EQFf/WpavuLWW+FDHyo0p5lVhosxsxrknq5i3XgjrFkD99xT8nBkBFx5Jdx1F8ydC7NnF5rRzCrHw5TdjKRGSZslPSNphaR+bb+rxXtNkrQqe32OpKtauXaApL9v5fwb7fi68yRd3s6sue9vVs3WroXrr4evfCWNRv7BvffCLbekzb9vuKGwfGZWeS7Gup/9ETE2IkYDB4CZpSeVtPvnGhF1EXFTK5cMAFosxsysbXv3pvXEPv5xWLy4ycnzzoPbboPbb3fXpVmNcTHWva0BhksaImm7pO8CvwQGS5osaZ2kX2Y9aEcCSJoiaYektcCX37mRpEskLcpef1jSSkn/nX2cBtwEDMt65RbkCSfpbElPStok6WFJHy45PUbSLyT9StKlJe+5QtJTkrZIur7T3yFrlifwF2PmTHjppTRPrH//7OBPfwqvvw59+8Jll6UFx8yspvivvpuSdDhwJvB0duhE4AcRMQ5oAOYCn42Ik4ENwGxJfYA7gbOB04GPtHD724HHImIMcDKwFbgK2JX1yl2RM+ZaYEKW6YfAlSXnTgK+AJwKXCfpY5ImAyOAU4CxwJ9K+nTOr2XtoA78Y52zYQOsWAHXXpueoARg1So46yy4+upCs5lZsTyBv/vpK2lz9noNcBfwMeB/ImJ9dnwCMAp4QqlLozdpC6BPAC9ExK8AJN0LzGjma/wlcBFARDQC+yR9sANZBwE/kvTRLMMLJecejIj9wH5Jj5IKsD8HJgObsmuOJBVnj3fga1sr3NNVefPnw4ABqfMLgMceg/PPh3Hj4KbWZgiYWU/nYqz72R8R79kpOCu4GkoPAf/RdOsfSWOBKHvCdy0EvhMRdZImAfNKzjXNEaTc8yPi+5WJV7tci1XWjh1pgderr4ajjgI2boSzz05L7q9enR00s1rlYcqeaT3wKUnDAST1k3QCsAMYKmlYdl1L+zQ+Anwte28vSUcB/wf0b+H6lhwN/CZ7fXGTc1Ml9ZF0DDAJeIq0qfrflsxvO07Sse38mpaHOvBhHXbzzXDEETBrFmkJixkz0hpiP/85DBxYdDwzK5h7xnqgiPitpEuAZZKOyA7PjYjnJM0AfiLpVdKcrtHN3OIfgTskTQcaga9FxDpJT0h6BljdzLyxfpLqSz7/DqknbIWk35AKxNKd9/4L+AlwPPCtiNgD7JE0EliX9fa9AUwDXunYd8Ja4jlglbN7d1pPbOZMOPZYAMEDD6QtjwYNKjqemVUBRVRy1MrMqkHDgfb/4X+gt2eatcf48eNjw4YNzJ4NCxfC8+v+l8GrlqQZ/L16FR3PzLqYpI0RMb7tK9/Pw5RmNahco5TZ0inPStrZ2iLC1aStzJKOkPSj7PyTkobkvXdE2tnor894ncF/dwYsWADPPdeV8c2sB3AxZlaLylCNSeoFLCYtuTIKuFDSqK4P33VyZp4O/C4ihgO3Af+a9/67dsFruxtYsP0LsG1bmsU/cmRXxTezHsLFmFkNKtM6Y6cAOyPi+Yg4QFpbbmpZG9J5eTJPBf4te30/8Bkp35DtxnUH+HfO5SMvrk8rvU6e3GXBzazncDFmVoPKtAL/ccDuks/rs2PVLE/mP1wTEQeBfcAxeW7+2MItnM4a9i24E849twvimllP5KcpzWpQn8Pb/zhl9iRu6SLBd0TEHaWXNPO2an9CKE/m3O1q8j16YyN/9uwSGMic6a8yZ3onYlaFgcCrRYfoIj2lLW5HdTmxo290MWZmuWSF1x2tXFIPDC75fBCwp6yhOi9P5neuqc+2ITsa2NvczZr7Hkna0NEnrKpJT2kH9Jy2uB3VRdKGjr7Xw5Rm1lWeAkZIGiqpN3ABUFdwprbkyVzHu4sWnwf8IrwmkJl1IfeMmVmXiIiDkr5B2kmhF7A0IrYWHKtVLWWWdAOwISLqSPu/3iNpJ6lH7ILiEptZT+RizMy6TEQ8BDxUdI72aC5zRFxX8vr3wPmd+BKtDe12Jz2lHdBz2uJ2VJcOt8Mr8JuZmZkVyHPGzMzMzArkYszMrAuUc1ulSsrRjtmStknaIukRSX9cRM625N2aS9J5kkJSVT7Nl6cdkv4q+5lslXRfpTPmleN363hJj0ralP1+fb6InK2RtFTSK5KeaeG8JN2etXGLpJPz3NfFmJlZJ5V7W6VKydmOTcD4iDiJtCPBzZVN2ba8W3NJ6g/MAp6sbMJ88rRD0gjgX4BPRcSfAJdVPGgOOX8mc4HlETGO9KDMdyubMpe7gSmtnD8TGJF9zACW5LmpizEzs84r67ZKFdRmOyLi0Yh4M/t0PWlttmqTd2uub5GKyd9XMlw75GnHpcDiiPgdQES8UuGMeeVpSwBHZa+PpgrXKYyIx2lhncHMVOAHkawHBkj6aFv3dTFmZtZ5Zd1WqYLau6XVdGB1WRN1TJvtkDQOGBwRqyoZrJ3y/DxOAE6Q9ISk9ZJa67UpUp62zAOmSaonPeH8D5WJ1qU6tC2cl7YwM+u8Lt1WqUDt2fppGjAemFjWRB3TajskHUYaKr6kUoE6KM/P43DSkNgkUi/lGkmjI+L1MmdrrzxtuRC4OyJulXQqaX2/0RFxqPzxukyH/s7dM2Zm1nnt2VaJtrZVKlCuLa0kfRa4BjgnIt6qULb2aKsd/YHRwH9KehGYANRV4ST+vL9XD0bE2xHxAvAsqTirNnnaMh1YDhAR64A+pH0ru5MObQvnYszMrPN6yrZKbbYjG977PqkQq9b5Sa22IyL2RcTAiBgSEUNIc9/OiYgO7y1YJnl+rx4A/gJA0kDSsOXzFU2ZT562/Br4DICkkaRi7LcVTdl5dcBF2VOVE4B9EfFSW2/yMKWZWSf1lG2VcrZjAXAksCJ7/uDXEXFOYaGbkbMdVS9nO34GTJa0DWgEroiI14pL3bycbZkD3Cnpn0hDe5dU23+wSFpGGhIemM1t+ybwRwAR8T3SXLfPAzuBN4G/yXXfKmunmZmZWU3xMKWZmZlZgVyMmZmZmRXIxZiZmZlZgVyMmZmZmRXIxZiZmZlZgVyMmZmZ5SSpUdLmko8hkiZJ2idpk6Ttkr6ZXVt6fIekW4rOb9XJ64yZmZnltz8ixpYekDQEWBMRZ0n6ALBZ0jt7Xr5zvC+wSdLKiHiispGt2rlnzMzMrItERAOwERjW5Ph+YDM5No222uNizMzMLL++JUOUK5uelHQMaa/LrU2Of5C0Z+TjlYlp3YmHKc3MzPJ73zBl5nRJm4BDwE3ZVj+TsuNbgBOz4y9XMKt1Ey7GzMzMOm9NRJzV0nFJJwBrszljmysdzqqbhynNzMzKLCKeA+YD/1x0Fqs+LsbMzMwq43vApyUNLTqIVRdFRNEZzMzMzGqWe8bMzMzMCuRizMzMzKxALsbMzMzMCuRizMzMzKxALsbMzMzMCuRizMzMzKxALsbMzMzMCuRizMzMzKxA/w8oYo5YG8Iu3AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x360 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lr3=LR(penalty='l2',C=0.4,solver='liblinear',max_iter=21,random_state=0)\n",
    "lr3_fit=lr3.fit(X_train,y_train)\n",
    "\n",
    "# 混淆矩阵\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.metrics import precision_score\n",
    "from sklearn.metrics import recall_score\n",
    "preds=lr3_fit.predict_proba(X_test)[:,1]\n",
    "a=[]\n",
    "tpr=[]\n",
    "fpr=[]\n",
    "for i in np.linspace(0,1,100): # ROC决策边界\n",
    "    pred=(preds>i)\n",
    "    # 召回率\n",
    "    r=confusion_matrix(y_test,pred)[1,1]/(confusion_matrix(y_test,pred)[1,1]+confusion_matrix(y_test,pred)[1,0])\n",
    "    # 假阳性率\n",
    "    fp=confusion_matrix(y_test,pred)[0,1]/(confusion_matrix(y_test,pred)[0,0]+confusion_matrix(y_test,pred)[0,1])\n",
    "    # 准确率\n",
    "    p=confusion_matrix(y_test,pred)[1,1]/(confusion_matrix(y_test,pred)[1,1]+confusion_matrix(y_test,pred)[0,1])\n",
    "    # f值\n",
    "    f=2*p*r/(p+r)\n",
    "    a.append(f)\n",
    "    tpr.append(r)\n",
    "    fpr.append(fp)\n",
    "table=pd.DataFrame({'prob':preds,'test':y_test})\n",
    "print('最优分裂点:',np.linspace(0,1,100)[a.index(max(a))],'/','fl_score值:',max(a))\n",
    "pred=(preds > np.linspace(0,1,100)[a.index(max(a))])\n",
    "mat=confusion_matrix(y_test,pred)\n",
    "r=confusion_matrix(y_test,pred)[1,1]/(confusion_matrix(y_test,pred)[1,1]+confusion_matrix(y_test,pred)[1,0])\n",
    "p=confusion_matrix(y_test,pred)[1,1]/(confusion_matrix(y_test,pred)[1,1]+confusion_matrix(y_test,pred)[0,1])\n",
    "AUC=roc_auc_score(y_test,preds)\n",
    "print('准确率:',p,'/','召回率:',r,'/','AUC:',AUC)\n",
    "fig,ax=plt.subplots(1,2,figsize=(10,5))\n",
    "\n",
    "plt.subplot(1,2,1)\n",
    "sns.heatmap(mat,square=True,annot=True,fmt='d',cbar=True,cmap='Blues')\n",
    "plt.xlabel('Predict Label')\n",
    "plt.ylabel('True Label')\n",
    "plt.title('confusion_matrix')\n",
    "\n",
    "plt.subplot(1,2,2)\n",
    "plt.plot(fpr,tpr,c='b')\n",
    "plt.xlabel('FPR')\n",
    "plt.xlim(-0.01,1.0)\n",
    "plt.ylabel('TPR')\n",
    "plt.ylim(0,1.01)\n",
    "plt.title('ROC curve')\n",
    "plt.plot(np.linspace(0,1,100),np.linspace(0,1,100),'--',c='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8196905135680645"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions = lr3.predict(X_test)\n",
    "# 利用accuracy_score来进行模型评估\n",
    "from sklearn.metrics import accuracy_score\n",
    "accuracy_score(y_test,predictions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7185024808316833"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#线性回归\n",
    "from sklearn.linear_model import LinearRegression\n",
    "regressor = LinearRegression()\n",
    "regressor.fit(X_train, y_train)\n",
    "# 看一下我们训练好的模型中，截距和斜率分别是多少\n",
    "regressor.intercept_ # 截距"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-4.55785437e-07,  2.10154579e-02, -2.10778058e-02,  7.51180736e-04,\n",
       "        2.99566410e-03, -8.99587303e-04, -1.82152705e-02, -5.52310409e-05,\n",
       "        8.32676183e-03,  8.42747063e-03, -2.99077729e-03,  1.08292490e-03,\n",
       "       -1.00434599e-03])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regressor.coef_ # 每个特征对应的斜率系数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coefficient</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <td>-4.557854e-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>city</th>\n",
       "      <td>2.101546e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gender_group</th>\n",
       "      <td>-2.107781e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>age_group</th>\n",
       "      <td>7.511807e-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wkd_ind</th>\n",
       "      <td>2.995664e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>product</th>\n",
       "      <td>-8.995873e-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>customer</th>\n",
       "      <td>-1.821527e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>revenue</th>\n",
       "      <td>-5.523104e-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>order</th>\n",
       "      <td>8.326762e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>quant</th>\n",
       "      <td>8.427471e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unit_cost</th>\n",
       "      <td>-2.990777e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unit_price</th>\n",
       "      <td>1.082925e-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>margin</th>\n",
       "      <td>-1.004346e-03</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Coefficient\n",
       "Unnamed: 0   -4.557854e-07\n",
       "city          2.101546e-02\n",
       "gender_group -2.107781e-02\n",
       "age_group     7.511807e-04\n",
       "wkd_ind       2.995664e-03\n",
       "product      -8.995873e-04\n",
       "customer     -1.821527e-02\n",
       "revenue      -5.523104e-05\n",
       "order         8.326762e-03\n",
       "quant         8.427471e-03\n",
       "unit_cost    -2.990777e-03\n",
       "unit_price    1.082925e-03\n",
       "margin       -1.004346e-03"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 用dataframe的形式把斜率表现出来\n",
    "coeff_df= pd.DataFrame(regressor.coef_, X.columns, columns=['Coefficient'])\n",
    "coeff_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
